package org.example.DAO;


import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;

/**
 * 数据库工具类 - 负责数据库连接和资源关闭
 */
public class DBUtil {
    // 数据库连接信息（根据实际情况修改）
    private static final String JDBC_URL = "jdbc:mysql://localhost:3306/content_rating?useSSL=false&serverTimezone=UTC&allowPublicKeyRetrieval=true&characterEncoding=UTF-8";
    private static final String JDBC_USER = "root";
    private static final String JDBC_PASSWORD = "root";

    // 加载MySQL驱动（JDBC 4.0+ 后自动加载，此代码为兼容旧版本）
    static {
        try {
            Class.forName("com.mysql.cj.jdbc.Driver");
        } catch (ClassNotFoundException e) {
            System.err.println("MySQL JDBC驱动加载失败!");
            e.printStackTrace();
            throw new ExceptionInInitializerError("数据库驱动加载失败，请检查依赖");
        }
    }

    /**
     * 获取数据库连接
     * @return Connection对象
     * @throws SQLException 数据库连接异常
     */
    public static Connection getConnection() throws SQLException {
        return DriverManager.getConnection(JDBC_URL, JDBC_USER, JDBC_PASSWORD);
    }

    /**
     * 关闭数据库连接
     * @param conn Connection对象
     */
    public static void close(Connection conn) {
        if (conn != null) {
            try {
                conn.close();
            } catch (SQLException e) {
                System.err.println("关闭数据库连接时出错:");
                e.printStackTrace();
            }
        }
    }

    /**
     * 关闭Statement对象
     * @param stmt Statement对象
     */
    public static void close(Statement stmt) {
        if (stmt != null) {
            try {
                stmt.close();
            } catch (SQLException e) {
                System.err.println("关闭Statement时出错:");
                e.printStackTrace();
            }
        }
    }

    /**
     * 关闭PreparedStatement对象
     * @param pstmt PreparedStatement对象
     */
    public static void close(PreparedStatement pstmt) {
        if (pstmt != null) {
            try {
                pstmt.close();
            } catch (SQLException e) {
                System.err.println("关闭PreparedStatement时出错:");
                e.printStackTrace();
            }
        }
    }

    /**
     * 关闭ResultSet对象
     * @param rs ResultSet对象
     */
    public static void close(ResultSet rs) {
        if (rs != null) {
            try {
                rs.close();
            } catch (SQLException e) {
                System.err.println("关闭ResultSet时出错:");
                e.printStackTrace();
            }
        }
    }

    /**
     * 关闭所有数据库资源（Connection, Statement, ResultSet）
     * @param conn Connection对象
     * @param stmt Statement对象
     * @param rs ResultSet对象
     */
    public static void closeAll(Connection conn, Statement stmt, ResultSet rs) {
        close(rs);
        close(stmt);
        close(conn);
    }

    /**
     * 关闭所有数据库资源（Connection, PreparedStatement, ResultSet）
     * @param conn Connection对象
     * @param pstmt PreparedStatement对象
     * @param rs ResultSet对象
     */
    public static void closeAll(Connection conn, PreparedStatement pstmt, ResultSet rs) {
        close(rs);
        close(pstmt);
        close(conn);
    }

    /**
     * 关闭所有数据库资源（Connection, PreparedStatement）
     * @param conn Connection对象
     * @param pstmt PreparedStatement对象
     */
    public static void closeAll(Connection conn, PreparedStatement pstmt) {
        close(pstmt);
        close(conn);
    }

    /**
     * 测试数据库连接是否正常
     */
    public static void testConnection() {
        Connection conn = null;
        try {
            conn = getConnection();
            if (conn != null && !conn.isClosed()) {
                System.out.println("数据库连接成功!");
                System.out.println("数据库URL: " + JDBC_URL);
            }
        } catch (SQLException e) {
            System.err.println("数据库连接测试失败:");
            e.printStackTrace();
        } finally {
            close(conn);
        }
    }

    // 测试方法（可选）
    public static void main(String[] args) {
        System.out.println("测试数据库连接...");
        testConnection();
    }
}